<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script type="text/javascript">
        // 源数据
        let person = {
            name:'张三',
            age:18
        }

        // 模拟vue2中实现响应式
        // #region
        // let p = {}
        // Object.defineProperty(p,'name',{
        //     configurable:true,
        //     get(){
        //         return person.name
        //     },
        //     set(value){
        //         person.name = value
        //     }
        // })
        // Object.defineProperty(p,'age',{
        //     get(){
        //         return person.age
        //     },
        //     set(value){
        //         person.age = value
        //     }
        // })
        //#endregion
    
        
        // #region  
        // 模拟vue3中实现响应式
        const p = new Proxy(person,{
            get(target,propName){
                console.log(`有人读取了p身上的${propName}属性`)
                return Reflect.get(target,propName)
            },
            set(target,propName,value){
                console.log(`有人修改了p身上的${propName}属性，我要去更新界面了`)
                Reflect.set(target,propName,value)
            },
            deleteProperty(target,propName){
                console.log(`有人删除了p身上的${propName}属性，我要去更新界面了`)
                return Reflect.deleteProperty(target,propName)
            }
        })
        //#endregion

        let obj = {a:1,b:2}
    </script>
    
</body>
</html>